壹月 贰月 叁月 里逛 U
群/水犇犇学到的一些有趣的知识。
周贰
一个式子
g ( n ) = ∏ d ∣ n f ( d ) ⟺ f ( n ) = ∏ d ∣ n g ( n d ) μ ( d )
g(n) = \prod_{d|n}f(d)\ \Longleftrightarrow \ f(n)=\prod_{d|n}g(\frac{n}{d})^{\mu(d)}
g ( n ) = d ∣ n ∏ f ( d ) ⟺ f ( n ) = d ∣ n ∏ g ( d n ) μ ( d )
取完
ln \ln ln
就是标准的狄利克雷卷积形式,莫比乌斯反演后 exp
即可,感觉挺有意思/CY.
周叁
exCRT 优化
exCRT 的一种姿势,推了推式子,换了一种更好背的式子。
{ x ≡ a 1 ( m o d p 1 ) x ≡ a 2 ( m o d p 2 )
\begin{cases}
x \equiv a_1\pmod{p_1}\\\\
x \equiv a_2\pmod{p_2}
\end{cases}
⎩ ⎨ ⎧ x ≡ a 1 ( mod p 1 ) x ≡ a 2 ( mod p 2 )
考虑合并以上方程:
exgcd(p1, p2, t1, t2)
( a 2 − a 1 ) ∣ ( p 1 , p 2 ) (a_2-a_1)|(p_1, p_2) ( a 2 − a 1 ) ∣ ( p 1 , p 2 )
有解
x ≡ a 1 + t 1 ( a 2 − a 1 ) ( p 1 , p 2 ) × p 1 ( m o d [ p 1 , p 2 ] )
x \equiv a_1 + \frac{t_1(a_2 - a_1)}{(p_1, p_2)}\times p_1 \pmod{[p1, p2]}
x ≡ a 1 + ( p 1 , p 2 ) t 1 ( a 2 − a 1 ) × p 1 ( mod [ p 1 , p 2 ])
应用
快速乘法
inline ULL mul( ULL a, ULL b, ULL MOD){ // unsigned long long
LL R = ( LL) a* b - ( LL)(( ULL)(( long double ) a * b / MOD) * MOD);
if ( R < 0 ) R += MOD;
if ( R > MOD) R -= MOD;
return R;
}
// 只关心两个答案的差值,这个差值一定小于 unsigned long long 的最大值, 所以在哪个剩余系下都不重要,不管差值是什么都能还原出原始数值。
卡特兰数
单独成文
三元环与四元环计数
黄队长博客
一类维护两个有影响序列的线段树
问题形如,考虑维护两个序列
A , B A, B A , B
支持对
A A A
做某些修改(区间加、区间乘等),还要求支持将
A A A
的某个区间加到
B B B
的相应位置。
考虑线段树上维护一个
n , n ≥ 2 n, n\ge 2 n , n ≥ 2
维向量,可能需要构造一些常数加入元素矩阵来支持操作,每一次操作可以看作矩阵乘法,由于矩阵乘法具有结合律,所以这样能够保证支持标记的合并
/CY.
贰月 叁月 一些小到无法单独成文的知识。
排列三维偏序
可以考虑使用容斥原理转化为二维偏序。
先对序列两两求二维偏序,然后求和,对于任意一个数对
( i , j ) (i, j) ( i , j )
,合法的三位偏序会被重复计算三次,不合法的三维偏序会被计算一次。最终答案减去
( n 2 ) \dbinom{n}{2} ( 2 n )
然后除
2 2 2
即为所求。
线性基琐记
一篇探讨线性基本质的文章
一篇阐述线性基性质的文章
由于不太了解线性基本质,只能不加证明的阐述一些事实。
线性基有两种构建方式,准确的说,是有两种存在形式。
第一种构造方式:
void add( LL t){
for ( int i = _B; i >= 0 ; i--){
if (!( t & ( 1 LL << i))) continue ;
if ( v[ i]) t ^= v[ i];
else {
for ( int k = 0 ; k < i; k++) if ( t & ( 1 LL << k)) t ^= v[ k];
for ( int k = i + 1 ; k <= _B; k++) if ( v[ k] & ( 1 LL << i)) v[ k] ^= t;
v[ i] = t;
break ;
}
}
}
第二种构造方式:
void add( LL t){
for ( int i = _B; i >= 0 ; i--){
if (!( t & ( 1 LL << i))) continue ;
if ( v[ i]) t ^= v[ i];
else {
v[ i] = t;
break ;
}
}
}
区别在于第二种构造方式删除了两行 for
循环,本质上是在插入过程中不在维护
“线性基中存在的位对应的那一列只有一个 1” 的性质。
第一种构建方式使得每一位之间脱离联系,基本是支持了大部分线性基操作,如:
最大值(从高位到低位依次贪心查询异或上这个基能否使得答案变优)
最小值(就是线性基里面的最小值)
第
k k k
大值,将线性基中存在的位依次排开,按照
k k k
的每个二进制位是否为
1 1 1
选出一些位,异或起来。
查询是否能够异或出某个数字
x x x ,如果
x x x
的某一位是
1 1 1
那么就把
x x x
异或上线性基上的这一位,最后判断
x x x
是否为
0 0 0
即可。
第二种构建方式:
最大值的操作相同,可以发现,从查询最大值得角度,这两种线性基的存在形式是本质相同的。
最小值操作相同。
第
k k k
大值:由于每一位之间并没有脱离联系,所以无法单独考虑每一位,需要先转化为第一种线性基,然后进行相同的操作。
void rebuild() {
for ( int i = 63 ; i >= 0 ; i--)
for ( int j = i- 1 ; j >= 0 ; j--)
if ( p[ i] & ( 1 LL << j))
p[ i] ^= p[ j];
}
但是第二种线性基支持所谓的 离线带删
。支持查询序列的某个区间的信息。详见题解
补充一些显然的小性质:
线性基的结构可能与元素插入顺序有关,但是成功插入的元素数量对于相同的插入集合是唯一的。
一类满足结合律的矩阵乘法
定义矩阵上运算
∗ * ∗
,C = A ∗ B C=A*B C = A ∗ B
满足:
C i , j = max / min ( A i , k + B k , j )
C_{i, j} = \max/\min{(A_{i, k}+B_{k,j})}
C i , j = max / min ( A i , k + B k , j )
可以证明
∗ * ∗
满足结合律。
关于这类矩阵乘法,单位矩阵
的定义可以考虑每个运算的单位元是什么。考虑一般意义下的矩阵乘法:
C i , j = ∑ k A i , k × B k , j
C_{i, j} = \sum_{k} A_{i, k} \times B_{k, j}
C i , j = k ∑ A i , k × B k , j
和一般意义下的单位矩阵(一个位置为
1 1 1
当且仅当其在对角线上,其他位置为
0 0 0 )
0 0 0
是加法运算单位元,
1 1 1
是乘法运算单位元。
那么显然这里定义的矩阵乘法中,单位矩阵应该类似的定义成:
对角线上为加法单位元
0 0 0
其他位置为
min / max \min / \max min / max
单位元
∞ / − ∞ \infty / -\infty ∞/ − ∞
一个小转化
最小权覆盖 = 全集 − 最大独立集
\text{最小权覆盖} = \text{全集} - \text{最大独立集}
最小权覆盖 = 全集 − 最大独立集
显然成立。
三角矩阵的
O ( n 2 ) \mathcal{O}(n^2) O ( n 2 )
消元
每次到达一行
i i i
时,有用的值只有
M i , i M_{i, i} M i , i
和
常数项,其他值都已经成零了,只需要用这两个有用值消后面的行即可,每消一行是
O ( 1 ) O(1) O ( 1 )
的。
一些类似三角阵的矩阵也可以完成快速消元,例如比三角阵稍微大一点点的矩阵。example
轮廓线 dp
描述状态为一个类似于轮廓线的东西,类似于状压 dp
,0 0 0
表示向上走,1 1 1
表示向右走这样的东西。 和简单博弈结合
拉格朗日插值
拉格朗日插值是真的能把多项式函数的系数插出来的。多项式多点插值能用多项式方法做到
O ( n log n ) \mathcal{O}(n\log n) O ( n log n )
,这里只记录
O ( n 2 ) \mathcal{O}(n^2) O ( n 2 )
的方法。
考虑拉格朗日插值的式子:
f ( x ) = ∑ i = 1 n ∏ j ≠ i ( x − x i ) ( x j − x i ) y j
f(x) = \sum_{i=1}^{n}\prod_{j \not = i}\frac{(x-x_i)}{(x_j - x_i)}y_j
f ( x ) = i = 1 ∑ n j = i ∏ ( x j − x i ) ( x − x i ) y j
式子中每一项的分母和
y j y_j y j
都是常数项,可以平凡的求出。
分子上除掉
y y y
的剩余部分都和
∏ i ( x − x i ) \prod_i(x-x_i) ∏ i ( x − x i )
差一项,可以先考虑预处理出
∏ i ( x − x i ) \prod_{i}(x-x_i) ∏ i ( x − x i )
,然后在每次处理点值的时候除掉某一项即可。
预处理:考虑乘上一个
( x − x i ) (x - x_i) ( x − x i )
多项式会发生 甚么事了 什么变化,相当于前移一位再加上乘
− x i -x_i − x i
后的多项式。暴力做即可,这里不会成为复杂度瓶颈。
除掉某一项:可以考虑从低到高依次还原每一项的系数。
如果 dp
为卷积,可以考虑构建一个生成函数后,求点值加速生成函数的卷积运算,最后再用
lagrange 把系数插出来。
不太好写:
struct LagrangeHelper{
int B0[ _], B1[ _];
#define X first
#define Y second
void operator () ( pair< int , int > * pts, int n, int * ret){
for ( int i = 0 ; i < n; i++) ret[ i] = 0 ;
for ( int i = 0 ; i < n; i++) B0[ i] = 0 ; B0[ 0 ] = 1 ;
for ( int i = 1 ; i <= n; i++){ // \prod{ (x - x_i) }
for ( int j = n; j >= 0 ; j--){
B0[ j] = ( B0[ j] * 1 ll * ( MOD - pts[ i]. X) % MOD + ( j == 0 ? 0 : B0[ j - 1 ])) % MOD;
}
}
for ( int i = 1 ; i <= n; i++){
int d = pts[ i]. Y;
for ( int j = 1 ; j <= n; j++){
if ( i == j) continue ;
d = d * 1 ll * inv( pts[ i]. X - pts[ j]. X) % MOD;
}
for ( int j = 0 ; j < n; j++) B1[ j] = B0[ j];
for ( int j = 0 ; j < n; j++) {
if ( j == 0 ) B1[ j] = B1[ j] * 1 ll * inv(- pts[ i]. X) % MOD;
else B1[ j] = ( B1[ j] - B1[ j - 1 ] + MOD) * 1 ll * inv(- pts[ i]. X) % MOD;
}
for ( int j = 0 ; j < n; j++) ret[ j] = ( ret[ j] + B1[ j] * 1 ll * d % MOD) % MOD;
}
}
#undef X
#undef Y
} d;
🔗 Source Hash:
712006c3263759a0a3810fceacabedcba8306f1a2817a7022a57aa4fbe03448c
Build Logs
Build Log - Filtered
================================================
📋 Information:
• Path information has been filtered for privacy protection
• File names are preserved for debugging purposes
• All build status and error messages are kept intact
🔍 Filter Rules:
• /absolute/path/file.ext → .../file.ext
• /home/username → .../[user]
• /tmp/files → .../[temp]
• /usr/share/packages → .../[system]
================================================
html log:
CMD: ['pandoc', '-s', 'cache/oi-blog_「琐记」壹月 贰月.md', '--filter', 'pandoc-crossref', '--filter', 'pandoc-katex', '--template=cache/pandoc_html_template.html', '-o', 'cache/oi-blog_「琐记」壹月 贰月.md.html', '--metadata', '--verbose', '--highlight-style=tango']
STDOUT:
STDERR: WARNING: pandoc-crossref was compiled with pandoc 3.6.2 but is being run through 3.6.4. This is not supported. Strange things may (and likely will) happen silently.
====================================================================================================
pdf log:
CMD: ['pandoc', '-s', 'cache.../dbd3207bc6.pdf.md', '-o', 'cache/dbd3207bc6.pdf', '-H', 'static/pandoc.header.tex', '--pdf-engine=xelatex', '--verbose']
STDOUT:
STDERR: [INFO] Loaded static.../pandoc.header.tex from static.../pandoc.header.tex
[INFO] Not rendering RawBlock (Format "html") ""
[INFO] Not rendering RawBlock (Format "html") ""
[INFO] [makePDF] Temp dir:
.../[temp]
[INFO] [makePDF] Command line:
xelatex "-halt-on-error" "-interaction" "nonstopmode" "-output-directory" ".../[temp] ".../[temp]
[INFO] [makePDF] Relevant environment variables:
("TEXINPUTS",".../[temp]
("TEXMFOUTPUT",".../[temp]
("SHELL","/bin/bash")
("PWD",".../[user]/projects/blog")
("HOME",".../[user]
("LANG","zh_CN.UTF-8")
("PATH",".../[user]/.local/bin:.../[user]/.cargo/bin:.../[user]/miniconda3/envs/myblog/bin:.../[user]/miniconda3/condabin:.../[temp]
[INFO] [makePDF] Source:
% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
\PassOptionsToPackage{space}{xeCJK}
\documentclass[
]{article}
\usepackage{xcolor}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{amsmath,amssymb}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
\usepackage{iftex}
\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
\usepackage{unicode-math} % this also loads fontspec
\defaultfontfeatures{Scale=MatchLowercase}
\defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
\usepackage{lmodern}
\ifPDFTeX\else
% xetex/luatex font selection
\setmainfont[]{Latin Modern Roman}
\ifXeTeX
\usepackage{xeCJK}
\setCJKmainfont[]{AR PL UKai CN}
\fi
\ifLuaTeX
\usepackage[]{luatexja-fontspec}
\setmainjfont[]{AR PL UKai CN}
\fi
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\usepackage{setspace}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
\KOMAoptions{parskip=half}}
\makeatother
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\ifLuaTeX
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
\else
\usepackage{soul}
\ifXeTeX
% soul's \st doesn't work for CJK:
\usepackage{xeCJKfntef}
\renewcommand{\st}[1]{\sout{#1}}
\fi
\fi
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
% \usepackage{xeCJK}
% \setCJKmainfont{AR PL UKai CN}
% \usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\usepackage{bookmark}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same}
\hypersetup{
pdftitle={「琐记」壹月 贰月 叁月},
pdfauthor={Jiayi Su (ShuYuMo)},
hidelinks,
pdfcreator={LaTeX via pandoc}}
\title{「琐记」壹月 贰月 叁月}
\author{Jiayi Su (ShuYuMo)}
\date{2021-01-19 15:35:06}
\begin{document}
\maketitle
\setstretch{1.3}
壹月 贰月 叁月 里逛 \texttt{U} 群/水犇犇学到的一些有趣的知识。
\subsection{周贰}\label{ux5468ux8d30}
\subsubsection{一个式子}\label{ux4e00ux4e2aux5f0fux5b50}
\[
g(n) = \prod_{d|n}f(d)\ \Longleftrightarrow \ f(n)=\prod_{d|n}g(\frac{n}{d})^{\mu(d)}
\]
取完 \(\ln\) 就是标准的狄利克雷卷积形式,莫比乌斯反演后 exp
即可,感觉挺有意思/CY.
\subsection{周叁}\label{ux5468ux53c1}
\subsubsection{exCRT 优化}\label{excrt-ux4f18ux5316}
exCRT 的一种姿势,推了推式子,换了一种更好背的式子。 \[
\begin{cases}
x \equiv a_1\pmod{p_1}\\\\
x \equiv a_2\pmod{p_2}
\end{cases}
\] 考虑合并以上方程:
\texttt{exgcd(p1,\ p2,\ t1,\ t2)} \((a_2-a_1)|(p_1, p_2)\) 有解 \[
x \equiv a_1 + \frac{t_1(a_2 - a_1)}{(p_1, p_2)}\times p_1 \pmod{[p1, p2]}
\]
\href{./「杂题记录」「NOI\%202018」屠龙勇士}{应用}
\subsubsection{快速乘法}\label{ux5febux901fux4e58ux6cd5}
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{inline}\NormalTok{ ULL mul}\OperatorTok{(}\NormalTok{ULL a}\OperatorTok{,}\NormalTok{ ULL b}\OperatorTok{,}\NormalTok{ ULL MOD}\OperatorTok{)\{} \CommentTok{// unsigned long long }
\NormalTok{ LL R }\OperatorTok{=} \OperatorTok{(}\NormalTok{LL}\OperatorTok{)}\NormalTok{a}\OperatorTok{*}\NormalTok{b }\OperatorTok{{-}} \OperatorTok{(}\NormalTok{LL}\OperatorTok{)((}\NormalTok{ULL}\OperatorTok{)((}\DataTypeTok{long} \DataTypeTok{double}\OperatorTok{)}\NormalTok{a }\OperatorTok{*}\NormalTok{ b }\OperatorTok{/}\NormalTok{ MOD}\OperatorTok{)} \OperatorTok{*}\NormalTok{ MOD}\OperatorTok{);}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{R }\OperatorTok{\textless{}} \DecValTok{0}\OperatorTok{)}\NormalTok{ R }\OperatorTok{+=}\NormalTok{ MOD}\OperatorTok{;}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{R }\OperatorTok{\textgreater{}}\NormalTok{ MOD}\OperatorTok{)}\NormalTok{ R }\OperatorTok{{-}=}\NormalTok{ MOD}\OperatorTok{;}
\ControlFlowTok{return}\NormalTok{ R}\OperatorTok{;}
\OperatorTok{\}}
\CommentTok{// 只关心两个答案的差值,这个差值一定小于 unsigned long long 的最大值, 所以在哪个剩余系下都不重要,不管差值是什么都能还原出原始数值。 }
\end{Highlighting}
\end{Shaded}
\subsubsection{卡特兰数}\label{ux5361ux7279ux5170ux6570}
\href{./「琐记」卡特兰数}{单独成文}
\subsubsection{三元环与四元环计数}\label{ux4e09ux5143ux73afux4e0eux56dbux5143ux73afux8ba1ux6570}
\href{https://notes.sshwy.name/Tri-Four-Cycle/}{黄队长博客}
\subsubsection{一类维护两个有影响序列的线段树}\label{ux4e00ux7c7bux7ef4ux62a4ux4e24ux4e2aux6709ux5f71ux54cdux5e8fux5217ux7684ux7ebfux6bb5ux6811}
问题形如,考虑维护两个序列 \(A, B\) 支持对 \(A\)
做某些修改(区间加、区间乘等),还要求支持将 \(A\) 的某个区间加到 \(B\)
的相应位置。
考虑线段树上维护一个 \(n, n\ge 2\)
维向量,可能需要构造一些常数加入元素矩阵来支持操作,每一次操作可以看作矩阵乘法,由于矩阵乘法具有结合律,所以这样能够保证支持标记的合并
/CY.
贰月 叁月 一些小到无法单独成文的知识。
\subsection{排列三维偏序}\label{ux6392ux5217ux4e09ux7ef4ux504fux5e8f}
可以考虑使用容斥原理转化为二维偏序。
先对序列两两求二维偏序,然后求和,对于任意一个数对 \((i, j)\)
,合法的三位偏序会被重复计算三次,不合法的三维偏序会被计算一次。最终答案减去
\(\dbinom{n}{2}\) 然后除 \(2\) 即为所求。
\subsection{线性基琐记}\label{ux7ebfux6027ux57faux7410ux8bb0}
一篇探讨线性基本质的\href{https://blog.sengxian.com/algorithms/linear-basis}{文章}
一篇阐述线性基性质的\href{https://blog.csdn.net/a_forever_dream/article/details/83654397}{文章}
由于不太了解线性基本质,只能不加证明的阐述一些事实。
线性基有两种构建方式,准确的说,是有两种存在形式。
第一种构造方式:
\begin{Shaded}
\begin{Highlighting}[]
\DataTypeTok{void}\NormalTok{ add}\OperatorTok{(}\NormalTok{LL t}\OperatorTok{)\{}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=}\NormalTok{ \_B}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textgreater{}=} \DecValTok{0}\OperatorTok{;}\NormalTok{ i}\OperatorTok{{-}{-})\{}
\ControlFlowTok{if}\OperatorTok{(!(}\NormalTok{t }\OperatorTok{\&} \OperatorTok{(}\DecValTok{1}\BuiltInTok{LL} \OperatorTok{\textless{}\textless{}}\NormalTok{ i}\OperatorTok{)))} \ControlFlowTok{continue}\OperatorTok{;}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{v}\OperatorTok{[}\NormalTok{i}\OperatorTok{])}\NormalTok{ t }\OperatorTok{\^{}=}\NormalTok{ v}\OperatorTok{[}\NormalTok{i}\OperatorTok{];}
\ControlFlowTok{else}\OperatorTok{\{}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ k }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ k }\OperatorTok{\textless{}}\NormalTok{ i}\OperatorTok{;}\NormalTok{ k}\OperatorTok{++)} \ControlFlowTok{if}\OperatorTok{(}\NormalTok{t }\OperatorTok{\&} \OperatorTok{(}\DecValTok{1}\BuiltInTok{LL} \OperatorTok{\textless{}\textless{}}\NormalTok{ k}\OperatorTok{))}\NormalTok{ t }\OperatorTok{\^{}=}\NormalTok{ v}\OperatorTok{[}\NormalTok{k}\OperatorTok{];}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ k }\OperatorTok{=}\NormalTok{ i }\OperatorTok{+} \DecValTok{1}\OperatorTok{;}\NormalTok{ k }\OperatorTok{\textless{}=}\NormalTok{ \_B}\OperatorTok{;}\NormalTok{ k}\OperatorTok{++)} \ControlFlowTok{if}\OperatorTok{(}\NormalTok{v}\OperatorTok{[}\NormalTok{k}\OperatorTok{]} \OperatorTok{\&} \OperatorTok{(}\DecValTok{1}\BuiltInTok{LL} \OperatorTok{\textless{}\textless{}}\NormalTok{ i}\OperatorTok{))}\NormalTok{ v}\OperatorTok{[}\NormalTok{k}\OperatorTok{]} \OperatorTok{\^{}=}\NormalTok{ t}\OperatorTok{;}
\NormalTok{ v}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{=}\NormalTok{ t}\OperatorTok{;}
\ControlFlowTok{break}\OperatorTok{;}
\OperatorTok{\}}
\OperatorTok{\}}
\OperatorTok{\}}
\end{Highlighting}
\end{Shaded}
第二种构造方式:
\begin{Shaded}
\begin{Highlighting}[]
\DataTypeTok{void}\NormalTok{ add}\OperatorTok{(}\NormalTok{LL t}\OperatorTok{)\{}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=}\NormalTok{ \_B}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textgreater{}=} \DecValTok{0}\OperatorTok{;}\NormalTok{ i}\OperatorTok{{-}{-})\{}
\ControlFlowTok{if}\OperatorTok{(!(}\NormalTok{t }\OperatorTok{\&} \OperatorTok{(}\DecValTok{1}\BuiltInTok{LL} \OperatorTok{\textless{}\textless{}}\NormalTok{ i}\OperatorTok{)))} \ControlFlowTok{continue}\OperatorTok{;}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{v}\OperatorTok{[}\NormalTok{i}\OperatorTok{])}\NormalTok{ t }\OperatorTok{\^{}=}\NormalTok{ v}\OperatorTok{[}\NormalTok{i}\OperatorTok{];}
\ControlFlowTok{else}\OperatorTok{\{}
\NormalTok{ v}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{=}\NormalTok{ t}\OperatorTok{;}
\ControlFlowTok{break}\OperatorTok{;}
\OperatorTok{\}}
\OperatorTok{\}}
\OperatorTok{\}}
\end{Highlighting}
\end{Shaded}
区别在于第二种构造方式删除了两行 \texttt{for}
循环,本质上是在插入过程中不在维护
\textbf{“线性基中存在的位对应的那一列只有一个 1”} 的性质。
第一种构建方式使得每一位之间脱离联系,基本是支持了大部分线性基操作,如:
\begin{itemize}
\tightlist
\item
最大值(从高位到低位依次贪心查询异或上这个基能否使得答案变优)
\item
最小值(就是线性基里面的最小值)
\item
第 \(k\) 大值,将线性基中存在的位依次排开,按照 \(k\)
的每个二进制位是否为 \(1\) 选出一些位,异或起来。
\item
查询是否能够异或出某个数字 \(x\),如果 \(x\) 的某一位是 \(1\) 那么就把
\(x\) 异或上线性基上的这一位,最后判断 \(x\) 是否为 \(0\) 即可。
\end{itemize}
第二种构建方式:
\begin{itemize}
\item
最大值的操作相同,可以发现,从查询最大值得角度,这两种线性基的存在形式是本质相同的。
\item
最小值操作相同。
\item
第 \(k\)
大值:由于每一位之间并没有脱离联系,所以无法单独考虑每一位,需要先转化为第一种线性基,然后进行相同的操作。
\begin{Shaded}
\begin{Highlighting}[]
\DataTypeTok{void}\NormalTok{ rebuild}\OperatorTok{()} \OperatorTok{\{}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=} \DecValTok{63}\OperatorTok{;}\NormalTok{i }\OperatorTok{\textgreater{}=} \DecValTok{0}\OperatorTok{;}\NormalTok{i}\OperatorTok{{-}{-})}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=}\NormalTok{ i}\OperatorTok{{-}}\DecValTok{1}\OperatorTok{;}\NormalTok{j }\OperatorTok{\textgreater{}=} \DecValTok{0}\OperatorTok{;}\NormalTok{j}\OperatorTok{{-}{-})}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{p}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{\&} \OperatorTok{(}\DecValTok{1}\BuiltInTok{LL} \OperatorTok{\textless{}\textless{}}\NormalTok{ j}\OperatorTok{))}
\NormalTok{ p}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{\^{}=}\NormalTok{ p}\OperatorTok{[}\NormalTok{j}\OperatorTok{];}
\OperatorTok{\}}
\end{Highlighting}
\end{Shaded}
\item
但是第二种线性基支持所谓的 \textbf{离线带删}
。支持查询序列的某个区间的信息。详见\href{https://www.luogu.com.cn/problem/solution/CF1100F}{题解}
\end{itemize}
补充一些显然的小性质:
\begin{itemize}
\tightlist
\item
线性基的结构可能与元素插入顺序有关,但是成功插入的元素数量对于相同的插入集合是唯一的。
\end{itemize}
\subsection{一类满足结合律的矩阵乘法}\label{ux4e00ux7c7bux6ee1ux8db3ux7ed3ux5408ux5f8bux7684ux77e9ux9635ux4e58ux6cd5}
定义矩阵上运算 \(*\) ,\(C=A*B\) 满足: \[
C_{i, j} = \max/\min{(A_{i, k}+B_{k,j})}
\] 可以证明 \(*\) 满足结合律。
关于这类矩阵乘法,\textbf{单位矩阵}
的定义可以考虑每个运算的单位元是什么。考虑一般意义下的矩阵乘法: \[
C_{i, j} = \sum_{k} A_{i, k} \times B_{k, j}
\] 和一般意义下的单位矩阵(一个位置为 \(1\)
当且仅当其在对角线上,其他位置为 \(0\))
\(0\) 是加法运算单位元, \(1\) 是乘法运算单位元。
那么显然这里定义的矩阵乘法中,单位矩阵应该类似的定义成:
\begin{itemize}
\tightlist
\item
对角线上为加法单位元 \(0\)
\item
其他位置为 \(\min / \max\) 单位元 \(\infty / -\infty\)
\end{itemize}
\subsection{一个小转化}\label{ux4e00ux4e2aux5c0fux8f6cux5316}
\[
\text{最小权覆盖} = \text{全集} - \text{最大独立集}
\]
显然成立。
\subsection{\texorpdfstring{三角矩阵的 \(\mathcal{O}(n^2)\)
消元}{三角矩阵的 \textbackslash mathcal\{O\}(n\^{}2) 消元}}\label{ux4e09ux89d2ux77e9ux9635ux7684-mathcalon2-ux6d88ux5143}
每次到达一行 \(i\) 时,有用的值只有 \(M_{i, i}\) 和
常数项,其他值都已经成零了,只需要用这两个有用值消后面的行即可,每消一行是
\(O(1)\) 的。
一些类似三角阵的矩阵也可以完成快速消元,例如比三角阵稍微大一点点的矩阵。\href{https://www.luogu.com.cn/problem/P4457}{example}
\subsection{轮廓线 dp}\label{ux8f6eux5ed3ux7ebf-dp}
描述状态为一个类似于轮廓线的东西,类似于状压 dp ,\(0\)
表示向上走,\(1\) 表示向右走这样的东西。
\href{https://www.luogu.com.cn/problem/P4363}{和简单博弈结合}
\subsection{拉格朗日插值}\label{ux62c9ux683cux6717ux65e5ux63d2ux503c}
拉格朗日插值是真的能把多项式函数的系数插出来的。多项式多点插值能用多项式方法做到
\(\mathcal{O}(n\log n)\) ,这里只记录 \(\mathcal{O}(n^2)\) 的方法。
考虑拉格朗日插值的式子: \[
f(x) = \sum_{i=1}^{n}\prod_{j \not = i}\frac{(x-x_i)}{(x_j - x_i)}y_j
\] 式子中每一项的分母和 \(y_j\) 都是常数项,可以平凡的求出。
分子上除掉 \(y\) 的剩余部分都和 \(\prod_i(x-x_i)\)
差一项,可以先考虑预处理出 \(\prod_{i}(x-x_i)\)
,然后在每次处理点值的时候除掉某一项即可。
预处理:考虑乘上一个 \((x - x_i)\) 多项式会发生 \st{甚么事了}
什么变化,相当于前移一位再加上乘 \(-x_i\)
后的多项式。暴力做即可,这里不会成为复杂度瓶颈。
除掉某一项:可以考虑从低到高依次还原每一项的系数。
如果 dp
为卷积,可以考虑构建一个生成函数后,求点值加速生成函数的卷积运算,最后再用
lagrange 把系数插出来。
不太好写:
\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{struct}\NormalTok{ LagrangeHelper}\OperatorTok{\{}
\DataTypeTok{int}\NormalTok{ B0}\OperatorTok{[}\NormalTok{\_}\OperatorTok{],}\NormalTok{ B1}\OperatorTok{[}\NormalTok{\_}\OperatorTok{];}
\PreprocessorTok{\#define X }\NormalTok{first}
\PreprocessorTok{\#define Y }\NormalTok{second}
\DataTypeTok{void} \KeywordTok{operator} \OperatorTok{()} \OperatorTok{(}\NormalTok{pair}\OperatorTok{\textless{}}\DataTypeTok{int}\OperatorTok{,} \DataTypeTok{int}\OperatorTok{\textgreater{}} \OperatorTok{*}\NormalTok{ pts}\OperatorTok{,} \DataTypeTok{int}\NormalTok{ n}\OperatorTok{,} \DataTypeTok{int} \OperatorTok{*}\NormalTok{ret}\OperatorTok{)\{}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textless{}}\NormalTok{ n}\OperatorTok{;}\NormalTok{ i}\OperatorTok{++)}\NormalTok{ ret}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{=} \DecValTok{0}\OperatorTok{;}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textless{}}\NormalTok{ n}\OperatorTok{;}\NormalTok{ i}\OperatorTok{++)}\NormalTok{ B0}\OperatorTok{[}\NormalTok{i}\OperatorTok{]} \OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ B0}\OperatorTok{[}\DecValTok{0}\OperatorTok{]} \OperatorTok{=} \DecValTok{1}\OperatorTok{;}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=} \DecValTok{1}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textless{}=}\NormalTok{ n}\OperatorTok{;}\NormalTok{ i}\OperatorTok{++)\{} \CommentTok{// \textbackslash{}prod\{ (x {-} x\_i) \}}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=}\NormalTok{ n}\OperatorTok{;}\NormalTok{ j }\OperatorTok{\textgreater{}=} \DecValTok{0}\OperatorTok{;}\NormalTok{ j}\OperatorTok{{-}{-})\{}
\NormalTok{ B0}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{=} \OperatorTok{(}\NormalTok{B0}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{*}\DecValTok{1}\BuiltInTok{ll}\OperatorTok{*} \OperatorTok{(}\NormalTok{MOD }\OperatorTok{{-}}\NormalTok{pts}\OperatorTok{[}\NormalTok{i}\OperatorTok{].}\NormalTok{X}\OperatorTok{)} \OperatorTok{\%}\NormalTok{ MOD }\OperatorTok{+} \OperatorTok{(}\NormalTok{j }\OperatorTok{==} \DecValTok{0} \OperatorTok{?} \DecValTok{0} \OperatorTok{:}\NormalTok{ B0}\OperatorTok{[}\NormalTok{j }\OperatorTok{{-}} \DecValTok{1}\OperatorTok{]))} \OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{;}
\OperatorTok{\}}
\OperatorTok{\}}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ i }\OperatorTok{=} \DecValTok{1}\OperatorTok{;}\NormalTok{ i }\OperatorTok{\textless{}=}\NormalTok{ n}\OperatorTok{;}\NormalTok{ i}\OperatorTok{++)\{}
\DataTypeTok{int}\NormalTok{ d }\OperatorTok{=}\NormalTok{ pts}\OperatorTok{[}\NormalTok{i}\OperatorTok{].}\NormalTok{Y}\OperatorTok{;}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=} \DecValTok{1}\OperatorTok{;}\NormalTok{ j }\OperatorTok{\textless{}=}\NormalTok{ n}\OperatorTok{;}\NormalTok{ j}\OperatorTok{++)\{}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{i }\OperatorTok{==}\NormalTok{ j}\OperatorTok{)} \ControlFlowTok{continue}\OperatorTok{;}
\NormalTok{ d }\OperatorTok{=}\NormalTok{ d }\OperatorTok{*}\DecValTok{1}\BuiltInTok{ll}\OperatorTok{*}\NormalTok{ inv}\OperatorTok{(}\NormalTok{pts}\OperatorTok{[}\NormalTok{i}\OperatorTok{].}\NormalTok{X }\OperatorTok{{-}}\NormalTok{ pts}\OperatorTok{[}\NormalTok{j}\OperatorTok{].}\NormalTok{X}\OperatorTok{)} \OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{;}
\OperatorTok{\}}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ j }\OperatorTok{\textless{}}\NormalTok{ n}\OperatorTok{;}\NormalTok{ j}\OperatorTok{++)}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{=}\NormalTok{ B0}\OperatorTok{[}\NormalTok{j}\OperatorTok{];}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ j }\OperatorTok{\textless{}}\NormalTok{ n}\OperatorTok{;}\NormalTok{ j}\OperatorTok{++)} \OperatorTok{\{}
\ControlFlowTok{if}\OperatorTok{(}\NormalTok{j }\OperatorTok{==} \DecValTok{0}\OperatorTok{)}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{=}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{*}\DecValTok{1}\BuiltInTok{ll}\OperatorTok{*}\NormalTok{ inv}\OperatorTok{({-}}\NormalTok{pts}\OperatorTok{[}\NormalTok{i}\OperatorTok{].}\NormalTok{X}\OperatorTok{)} \OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{;}
\ControlFlowTok{else}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{=} \OperatorTok{(}\NormalTok{B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{{-}}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j }\OperatorTok{{-}} \DecValTok{1}\OperatorTok{]} \OperatorTok{+}\NormalTok{ MOD}\OperatorTok{)} \OperatorTok{*}\DecValTok{1}\BuiltInTok{ll}\OperatorTok{*}\NormalTok{ inv}\OperatorTok{({-}}\NormalTok{pts}\OperatorTok{[}\NormalTok{i}\OperatorTok{].}\NormalTok{X}\OperatorTok{)} \OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{;}
\OperatorTok{\}}
\ControlFlowTok{for}\OperatorTok{(}\DataTypeTok{int}\NormalTok{ j }\OperatorTok{=} \DecValTok{0}\OperatorTok{;}\NormalTok{ j }\OperatorTok{\textless{}}\NormalTok{ n}\OperatorTok{;}\NormalTok{ j}\OperatorTok{++)}\NormalTok{ ret}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{=} \OperatorTok{(}\NormalTok{ret}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{+}\NormalTok{ B1}\OperatorTok{[}\NormalTok{j}\OperatorTok{]} \OperatorTok{*}\DecValTok{1}\BuiltInTok{ll}\OperatorTok{*}\NormalTok{ d }\OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{)} \OperatorTok{\%}\NormalTok{ MOD}\OperatorTok{;}
\OperatorTok{\}}
\OperatorTok{\}}
\PreprocessorTok{\#undef X}
\PreprocessorTok{\#undef Y}
\OperatorTok{\}}\NormalTok{d}\OperatorTok{;}
\end{Highlighting}
\end{Shaded}
\end{document}
[INFO] [makePDF] LaTeX run number 1
[INFO] [makePDF] LaTeX output
This is XeTeX, Version 3.141592653-2.6-0.999995 (TeX Live 2023/Debian) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(.../input.tex
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
(.../article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
(.../[system]
(.../xcolor.sty
(.../color.cfg)
(.../xetex.def)
(.../[system]
(.../geometry.sty
(.../keyval.sty)
(.../ifvtex.sty
(.../iftex.sty)))
(.../amsmath.sty
For additional information on amsmath, use the `?' option.
(.../amstext.sty
(.../amsgen.sty))
(.../amsbsy.sty)
(.../amsopn.sty))
(.../amssymb.sty
(.../amsfonts.sty))
(.../unicode-math.sty
(.../expl3.sty
(.../l3backend-xetex.def))
(.../unicode-math-xetex.sty
(.../xparse.sty)
(.../l3keys2e.sty)
(.../fontspec.sty
(.../fontspec-xetex.sty
(.../fontenc.sty)
(.../fontspec.cfg)))
(.../fix-cm.sty
(.../ts1enc.def))
(.../unicode-math-table.tex)))
(.../lmodern.sty)
(.../xeCJK.sty
(.../ctexhook.sty)
(.../xtemplate.sty)
(.../xeCJK.cfg))
(.../upquote.sty
(.../textcomp.sty))
(.../microtype.sty
(.../etoolbox.sty)
(.../microtype-xetex.def)
(.../microtype.cfg))
(.../setspace.sty)
(.../parskip.sty
(.../kvoptions.sty
(.../ltxcmds.sty)
(.../kvsetkeys.sty)))
(.../fancyvrb.sty)
(.../soul.sty
(.../soul-ori.sty)
(.../infwarerr.sty)
(.../etexcmds.sty))
(.../xeCJKfntef.sty
(.../ulem.sty))
(.../bookmark.sty
(.../hyperref.sty
(.../kvdefinekeys.sty)
(.../pdfescape.sty
(.../pdftexcmds.sty))
(.../hycolor.sty)
(.../auxhook.sty)
(.../nameref.sty
(.../refcount.sty)
(.../gettitlestring.sty))
(.../pd1enc.def)
(.../intcalc.sty)
(.../puenc.def)
(.../url.sty)
(.../bitset.sty
(.../bigintcalc.sty))
(.../atbegshi-ltx.sty))
(.../hxetex.def
(.../stringenc.sty)
(.../rerunfilecheck.sty
(.../atveryend-ltx.sty)
(.../uniquecounter.sty)))
(.../bkm-dvipdfm.def))
(.../xurl.sty)
No file input.aux.
*geometry* driver: auto-detecting
*geometry* detected driver: xetex
(.../mt-LatinModernRoman.cfg)
Package hyperref Warning: Rerun to get /PageLabels entry.
(.../omllmm.fd)
(.../umsa.fd)
(.../mt-msa.cfg)
(.../umsb.fd)
(.../mt-msb.cfg)
Package xeCJK Warning: Unknown CJK family `\CJKttdefault' is being ignored.
(xeCJK)
(xeCJK) Try to use `\setCJKmonofont[<...>]{<...>}' to define
(xeCJK) it.
LaTeX Font Warning: Font shape `TU/ARPLUKaiCN(0)/b/n' undefined
(Font) using `TU/ARPLUKaiCN(0)/m/n' instead on input line 127.
LaTeX Font Warning: Font shape `TU/ARPLUKaiCN(0)/m/it' undefined
(Font) using `TU/ARPLUKaiCN(0)/m/n' instead on input line 165.
[1] [2]
Missing character: There is no ( (U+FF08) in font LatinModernMath-Regular/OT:sc
ript=math;language=dflt;!
Missing character: There is no ) (U+FF09) in font LatinModernMath-Regular/OT:sc
ript=math;language=dflt;!
[3] [4] [5] (.../input.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
)
Output written on .../input.pdf (5 pages).
Transcript written on .../input.log.
[INFO] [makePDF] Rerun needed
Package hyperref Warning: Rerun to get /PageLabels entry.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
[INFO] [makePDF] LaTeX run number 2
[INFO] [makePDF] LaTeX output
This is XeTeX, Version 3.141592653-2.6-0.999995 (TeX Live 2023/Debian) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(.../input.tex
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
(.../article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
(.../[system]
(.../xcolor.sty
(.../color.cfg)
(.../xetex.def)
(.../[system]
(.../geometry.sty
(.../keyval.sty)
(.../ifvtex.sty
(.../iftex.sty)))
(.../amsmath.sty
For additional information on amsmath, use the `?' option.
(.../amstext.sty
(.../amsgen.sty))
(.../amsbsy.sty)
(.../amsopn.sty))
(.../amssymb.sty
(.../amsfonts.sty))
(.../unicode-math.sty
(.../expl3.sty
(.../l3backend-xetex.def))
(.../unicode-math-xetex.sty
(.../xparse.sty)
(.../l3keys2e.sty)
(.../fontspec.sty
(.../fontspec-xetex.sty
(.../fontenc.sty)
(.../fontspec.cfg)))
(.../fix-cm.sty
(.../ts1enc.def))
(.../unicode-math-table.tex)))
(.../lmodern.sty)
(.../xeCJK.sty
(.../ctexhook.sty)
(.../xtemplate.sty)
(.../xeCJK.cfg))
(.../upquote.sty
(.../textcomp.sty))
(.../microtype.sty
(.../etoolbox.sty)
(.../microtype-xetex.def)
(.../microtype.cfg))
(.../setspace.sty)
(.../parskip.sty
(.../kvoptions.sty
(.../ltxcmds.sty)
(.../kvsetkeys.sty)))
(.../fancyvrb.sty)
(.../soul.sty
(.../soul-ori.sty)
(.../infwarerr.sty)
(.../etexcmds.sty))
(.../xeCJKfntef.sty
(.../ulem.sty))
(.../bookmark.sty
(.../hyperref.sty
(.../kvdefinekeys.sty)
(.../pdfescape.sty
(.../pdftexcmds.sty))
(.../hycolor.sty)
(.../auxhook.sty)
(.../nameref.sty
(.../refcount.sty)
(.../gettitlestring.sty))
(.../pd1enc.def)
(.../intcalc.sty)
(.../puenc.def)
(.../url.sty)
(.../bitset.sty
(.../bigintcalc.sty))
(.../atbegshi-ltx.sty))
(.../hxetex.def
(.../stringenc.sty)
(.../rerunfilecheck.sty
(.../atveryend-ltx.sty)
(.../uniquecounter.sty)))
(.../bkm-dvipdfm.def))
(.../xurl.sty)
(.../input.aux)
*geometry* driver: auto-detecting
*geometry* detected driver: xetex
(.../mt-LatinModernRoman.cfg)
(.../omllmm.fd)
(.../umsa.fd)
(.../mt-msa.cfg)
(.../umsb.fd)
(.../mt-msb.cfg)
Package xeCJK Warning: Unknown CJK family `\CJKttdefault' is being ignored.
(xeCJK)
(xeCJK) Try to use `\setCJKmonofont[<...>]{<...>}' to define
(xeCJK) it.
LaTeX Font Warning: Font shape `TU/ARPLUKaiCN(0)/b/n' undefined
(Font) using `TU/ARPLUKaiCN(0)/m/n' instead on input line 127.
LaTeX Font Warning: Font shape `TU/ARPLUKaiCN(0)/m/it' undefined
(Font) using `TU/ARPLUKaiCN(0)/m/n' instead on input line 165.
[1] [2]
Missing character: There is no ( (U+FF08) in font LatinModernMath-Regular/OT:sc
ript=math;language=dflt;!
Missing character: There is no ) (U+FF09) in font LatinModernMath-Regular/OT:sc
ript=math;language=dflt;!
[3] [4] [5] (.../input.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
)
Output written on .../input.pdf (5 pages).
Transcript written on .../input.log.
[WARNING] Missing character: There is no ( (U+FF08) (U+FF08) in font LatinModernMath-Regular/OT:sc
[WARNING] Missing character: There is no ) (U+FF09) (U+FF09) in font LatinModernMath-Regular/OT:sc